#pragma once
/*
    这是一个附加的功能模块：提供给用户一个自定义日志格式的选择：
    格式串说明：
    %m ————> 代表消息
    %p ————> 代表日志等级
    %T ————> 代表时间
    %f ————> 代表源文件名
    %l ————> 代表行号
    %t ————> 代表线程ID
    %c ————> 代表日志器名称
*/
#include "message.hpp"
#include <ostream>
#include <memory>
#include <vector>

namespace bit
{  
    class Format
    {
    public:
        // 构造函数：
        Format(const std::string &pattern = "[日志器  ]：%c\n[日志等级]：%p\n"   
            "[源文件名]：%f\n[所在行号]：%l\n[线程ID  ]：%t\n"
            "[日志时间]：%T\n[日志内容]：%m\n\n");
        ~Format();
        void format(std::ostream& out, logMessage msg);
        std::string format(logMessage msg);
        const std::string& pattern();
    private:
        class FormatImpl;
        std::shared_ptr<FormatImpl> _pImpl; // 指向实现的指针 —— pointer to implementation
    };
}